package main

import "fmt"

// 1.chan<- int是一个只能发送的通道，可以发送但是不能接收；
// 2.<-chan int是一个只能接收的通道，可以接收但是不能发送。
func main() {
	chan1 := make(chan int)
	chan2 := make(chan int)

	go counter(chan1)
	go squarer(chan2, chan1)
	printer(chan2)
}

// chan<- 发送
func counter(out chan<- int) {
	for i := 0; i < 100; i++ {
		out <- i
	}
	close(out)
}

// chan<- 发送
func squarer(out chan<- int, in <-chan int) {
	for i := range in {
		out <- i * i
	}
	close(out)
}

// <-chan  只能接收
func printer(in <-chan int) {
	for n := range in {
		fmt.Println(n)
	}
}
